package ru.bank.paymentprocessing;

import io.restassured.RestAssured;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpStatus;
import ru.bank.paymentprocessing.service.PaymentService;

import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class PaymentControllerEightStepsTest {
    @LocalServerPort
    int port;

    @Autowired
    private PaymentService paymentService;

    @BeforeEach
    void setUp() {
        RestAssured.baseURI = "http://localhost:" + port + "/api/payment/";
        paymentService.init();
    }

    @Test
    void testPaymentSteps() {
        // Шаг 1: Online/100
        given()
                .when()
                .get("Online/100")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для ONLINE"));

        // Шаг 2: Shop/120
        given()
                .when()
                .get("Shop/120")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для SHOP"));

        // Шаг 3: Online/301
        given()
                .when()
                .get("Online/301")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для ONLINE"));

        // Шаг 4: Online/17
        given()
                .when()
                .get("Online/17")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для ONLINE"));

        // Шаг 5: Shop/1000
        given()
                .when()
                .get("Shop/1000")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для SHOP"));

        // Шаг 6: Online/21
        given()
                .when()
                .get("Online/21")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для ONLINE"));

        // Шаг 7: Shop/570
        given()
                .when()
                .get("Shop/570")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для SHOP"));

        // Шаг 8: Online/700
        given()
                .when()
                .get("Online/700")
                .then()
                .statusCode(HttpStatus.OK.value())
                .contentType("text/plain;charset=UTF-8")
                .body(equalTo("Платеж успешно обработан для ONLINE"));
    }
}
